-module(koordynator).

-export([utworz/0]).
-export([dodajZadanie/2]).
-export([wykonajZadania/1]).
-export([akcja/1]).
-export([wynik/0]).

utworz() ->
  register(koordynator,spawn(fun() -> akcja({[],0}) end)).

dodajZadanie(PidZadania, NazwaZadania) ->
  koordynator ! { dodajDoListy, PidZadania, NazwaZadania}.

wykonajZadania(Argument) ->
	koordynator ! { zlecZadanie, "SERWER", Argument }.
	
wynik() ->
	koordynator ! {wypiszWynik}.
	
akcja({ListaElementow, WynikSumy}) ->
  receive
    {zlecZadanie, Zlecajacy, Argument} ->
      [ Element ! { policz, Zlecajacy, Argument } || Element <- ListaElementow],
      akcja({ListaElementow,WynikSumy});

    {dodajDoListy, IdZadania, NazwaZadania } ->
      io:format("KOORDYNATOR: Dodano nowe zadanie do listy: ~s~n",[NazwaZadania]),
      akcja({[IdZadania|ListaElementow],WynikSumy});
	  
	{wynik,NazwaZadania, Wartosc} ->
       erlang:display(["KOORDYNATOR: zadanie o nazwie ",NazwaZadania," zakonczylo prace. Otrzymany wynik = ",Wartosc]),
      akcja({[ListaElementow],WynikSumy+Wartosc});
	  
	{wypiszWynik} ->
		erlang:display(["KOORDYNATOR: Suma z zadan = ",WynikSumy]),
		akcja({ListaElementow,WynikSumy})
  end.